package main

import (
	"fmt"
	"time"
)

func main() {
	/*
		通过 range 访问通道
            无通道上的发送操作（ch <- 10）会阻塞，直到另一个 goroutine 在该通道上执行接收操作，这时值才能发送成功。
            使用无缓冲通道进行通信将导致发送和接收的 goroutine 同步化。因此，无缓冲通道也被称为 “同步通道”。

            正确操作：
               1. go 有（ch <- 值）的函数
                  <-ch

               2. go 有（<-ch）的函数
                  ch <- 值

            错误操作：
               1. <-ch                                    //在此阻塞
                  ch <- 值 

               2. ch <- 值                                //在此阻塞
                  <-ch

               3. <-ch
                  go 有（ch <- 10）的函数 
                  
               4. ch <- 值                                //在此阻塞
                  go 有（<-ch）的函数

               5. ch <- 值                                //在此阻塞
                  close(ch)                               //即使关闭也不行
                  go 有（<-ch）的函数
	*/
	ch12 := make(chan int)
	go sendData1(ch12)
	//for循环的for range，来访问通道
	for v := range ch12 { // v <- ch12
		fmt.Println("读取数据。。", v)
	}
	fmt.Println("main...over...")
}
func sendData1(ch1 chan int) {
	for i := 0; i < 10; i++ {
		time.Sleep(time.Second)
		ch1 <- i
	}
	close(ch1) //通知对方，通道关闭
}
